# -*- coding: utf-8 -*-

import base64
import random


class ProxyMiddleware(object):

    def __init__(self):
        # 代理IP相关的所有配置
        self.__proxy_list = [
            {'ip_port': '代理IP', 'user_pass': None}]
        # 代理IP服务器地址
        self.proxyServer = "服务器地址"
        # 代理IP的用户名
        self.proxyUser = "用户名"
        # 代理IP的密码
        self.proxyPass = "密码"
        # 使用代理IP的默认格式
        # 对用户名密码进行加密
        # encode(encoding="utf-8") 设置编码
        # base64.b64encode((self.proxyUser + ":" + self.proxyPass).encode(encoding="utf-8")) 字符串加密；
        # 加密后返回的是bytes对象，转化为字符串的方式 str(bytes, encoding="utf-8")
        self.proxyAuth = "Basic " + str(
            base64.b64encode((self.proxyUser + ":" + self.proxyPass).encode(encoding="utf-8")), encoding="utf-8")

    def process_request(self, request, spider):
        # 获取当前爬虫是否需要代理IP
        need_proxy = getattr(spider, "need_proxy", False)
        if not need_proxy:
            return

        # 如果需要代理IP，在参数中设置
        request.meta["proxy"] = self.proxyServer
        request.headers["Proxy-Authorization"] = self.proxyAuth

    def random_choice_proxy(self):
        # 从IP池中随机选择一个代理IP
        return random.choice(self.__proxy_list)
